﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using System.Data.Entity;
using System.ServiceModel.Activation;
using WcfRestService1;

namespace MezmurStore2
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801

    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
        }

        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Player", action = "Index", id = UrlParameter.Optional }, new { controller = new NotInValuesConstraint(new[] { "songservice" }) } // Parameter defaults
            );

            // register wcf route
            routes.Add(new ServiceRoute("songservice", new WebServiceHostFactory(), typeof(SongService)));
            routes.IgnoreRoute("Scripts/{*pathInfo}");
                        

        }

        protected void Application_Start()
        {
            //Database.SetInitializer(new SampleData());

            AreaRegistration.RegisterAllAreas();

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
        }
    }

    public class NotInValuesConstraint : IRouteConstraint
    { 
        public NotInValuesConstraint(params string[] values) 
        { 
            _values = values; 
        } 
        
        private string[] _values; 
        public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
        { 
            string value = values[parameterName].ToString(); 
            return !_values.Contains(value, StringComparer.CurrentCultureIgnoreCase); 
        } 
    }

}